#include <stdio.h>
#include <omp.h>

// unroll_partial_remainder_option3 函数
void unroll_partial_remainder_option3(int n, int A[])
{
    // 主循环，处理每 4 个元素一组的数据
    #pragma omp parallel for
    for (int i_iv = 0; i_iv < n / 4; ++i_iv) {
        A[i_iv * 4 + 0] = i_iv * 4 + 0;
        A[i_iv * 4 + 1] = i_iv * 4 + 1;
        A[i_iv * 4 + 2] = i_iv * 4 + 2;
        A[i_iv * 4 + 3] = i_iv * 4 + 3;
    }
    // 剩余元素的循环，处理不足 4 个的剩余元素
    #pragma omp parallel for
    for (int i_rem = (n / 4) * 4; i_rem < n; ++i_rem)
        A[i_rem] = i_rem;
}

int main() {
    int n = 10; // 定义数组的大小，可以根据需要修改
    int A[10];  // 定义数组

    // 调用 unroll_partial_remainder_option3 函数处理数组
    unroll_partial_remainder_option3(n, A);

    // 输出数组元素以验证结果
    printf("数组元素如下:\n");
    for (int i = 0; i < n; ++i) {
        printf("A[%d] = %d\n", i, A[i]);
    }

    return 0;
}    